<template>
  <HomePanel ref="target" title="新鲜好物" sub="新鲜出炉 品质靠谱">
    <template #right>
      <xtx-more></xtx-more>
    </template>

      <ul ref="pannel" class="goods-list">
        <li v-for="item in list" :key="item.id">
          <RouterLink :to="`/goods/${item.id}`">
            <img :src="item.picture" alt="" />
            <p class="name">{{ item.name }}</p>
            <p class="price">&yen;{{ item.price }}</p>
          </RouterLink>
        </li>
      </ul>

  </HomePanel>
</template>

<script>
import HomePanel from './home-panel'
import { findNew } from '@/api/home'
import { ref } from 'vue'
import { useDataLazy } from '@/hooks'
// 导入监控元素是否进入可视区钩子函数

export default {
  components: {
    HomePanel
  },
  setup () {
    // 1.定义响应式数据
    const list = ref([])
    const getNew = async () => {
      const { result } = await findNew()
      list.value = result
    }
    // getNew()
    /**
     * 封装数据懒加载方法
     * 核心: 把重复的代码放到一个函数里 找不同
     * 1. 留下相同的代码
     * 2. 不相同的代码 => 设计成参数
     * 组件需要使用函数内部的数据 可以return进行暴露
     * 需求:
     * 说明: target ref对象 监控进入可视区的元素或组件
     * const { target } = useDataLazy()
     */
    const { target } = useDataLazy(getNew)
    return {
      list,
      target
    }
  }
}
</script>

<style scoped lang='less'>
.goods-list {
  display: flex;
  justify-content: space-between;
  height: 406px;
  li {
    width: 306px;
    height: 406px;
    background: #f0f9f4;
    // 激活效果
    transition: all 0.5s;
    &:hover {
      transform: translate3d(0, -6px, 0);
      box-shadow: 0 6px 8px rgba(0, 0, 0, 0.2);
    }
    // end
    img {
      width: 306px;
      height: 306px;
    }
    p {
      font-size: 22px;
      padding-top: 12px;
      text-align: center;
      text-overflow: ellipsis;
      overflow: hidden;
      white-space: nowrap;
    }
    .price {
      color: @priceColor;
    }
  }
}
</style>
